package juanca.mole;

import java.sql.Time;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.util.EntityUtils;
import org.json.JSONArray;
import org.json.JSONObject;

import com.savagelook.android.JsonHelper;

import ClasesExtras.GetIpAddress;
import ClasesExtras.handlerAlertMessage;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.DatePickerDialog;
import android.app.Dialog;
import android.app.ProgressDialog;
import android.app.TimePickerDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.KeyEvent;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.DatePicker;
import android.widget.EditText;
import android.widget.TimePicker;
import android.widget.Toast;

public class ZonaProduccion extends Activity {

	private int fAno;
	private int fMes;
	private int fDia;
	private int hMinuto;
	private int hHora;
	private boolean valChecked;
	private boolean SALIR;
	private boolean pediluvioProd;
	private boolean pisoProd;
	private boolean ollasUteProd;
	private boolean zonasLvProd;
	private boolean mesaProd;
	private boolean techoProd;
	private boolean cortinasProd;
	private boolean peredesProd;
	private boolean soportLbArt;
	private String idEmpleado;
	private String passwEmpleado;
	private String idOperarioEmpleado;
	private Date fechaUsuario;
	private Time tiempoUsuario;
	private Date fechaSistema;
	private Time tiempoSistema;

	private handlerAlertMessage manejadorMensajes;
	private Activity activity;

	private CheckBox chBxPediluvioProd;
	private CheckBox chBxPisoProd;
	private CheckBox chBxOllasUteProd;
	private CheckBox chBxZonasLvProd;
	private CheckBox chBxMesaProd;
	private CheckBox chBxTechoProd;
	private CheckBox chBxCortinasProd;
	private CheckBox cheBxPeredesProd;
	private CheckBox chBxSoportLbArt;
	private Button btnRegistroProd;

	public ProgressDialog progressDialog;
	public static final int DATE_DIALOG_ID = 0;
	public static final int TIME_DIALOG_ID = 1;
	public static final String STRING_EMPTY = "";
	private String URL_VALIDAR_USUARIO;
	private String URL_ZONAS_PRODUCCION_CHEQUEADAS;
	private String URL_REGISTRO_ZONAS_PRODUCCION;
	private String CNV = "cnv";
	private static final String PNV = "pnv";
	private static final String no_permiso = "no_permiso";
	private ZonaProduccion self = this;

	/**
	 * @return the valChecked
	 */
	public boolean isValChecked() {
		return valChecked;
	}

	/**
	 * @param valChecked
	 *            the valChecked to set
	 */
	public void setValChecked(boolean valChecked) {
		this.valChecked = valChecked;
	}

	/**
	 * @return the sALIR
	 */
	public boolean isSALIR() {
		return SALIR;
	}

	/**
	 * @param sALIR
	 *            the sALIR to set
	 */
	public void setSALIR(boolean sALIR) {
		SALIR = sALIR;
	}

	/**
	 * @return the idOperarioEmpleado
	 */
	public String getIdOperarioEmpleado() {
		return idOperarioEmpleado;
	}

	/**
	 * @param idOperarioEmpleado
	 *            the idOperarioEmpleado to set
	 */
	public void setIdOperarioEmpleado(String idOperarioEmpleado) {
		this.idOperarioEmpleado = idOperarioEmpleado;
		this.setSALIR(true);
	}

	public String getIdEmpleado() {
		return idEmpleado;
	}

	public void setIdEmpleado(String idEmpleado) {
		this.idEmpleado = idEmpleado;
		this.setSALIR(true);
	}

	public String getPasswEmpleado() {
		return passwEmpleado;
	}

	public void setPasswEmpleado(String passwEmpleado) {
		this.passwEmpleado = passwEmpleado;
		this.setSALIR(true);
	}

	public Date getFechaUsuario() {
		return fechaUsuario;
	}

	public void setFechaUsuario(Date fechaUsuario) {
		this.fechaUsuario = fechaUsuario;
		this.setSALIR(true);
	}

	public Time getTiempoUsuario() {
		return tiempoUsuario;
	}

	public void setTiempoUsuario(Time tiempoUsuario) {
		this.tiempoUsuario = tiempoUsuario;
		this.setSALIR(true);
	}

	public Date getFechaSistema() {
		return fechaSistema;
	}

	public void setFechaSistema(Date fechaSistema) {
		this.fechaSistema = fechaSistema;
		this.setSALIR(true);
	}

	public Time getTiempoSistema() {
		return tiempoSistema;
	}

	public void setTiempoSistema(Time tiempoSistema) {
		this.tiempoSistema = tiempoSistema;
		this.setSALIR(true);
	}

	public boolean isPediluvioProd() {
		return pediluvioProd;
	}

	public void setPediluvioProd(boolean pediluvioProd) {
		this.pediluvioProd = pediluvioProd;
		this.setSALIR(true);
	}

	public boolean isPisoProd() {
		return pisoProd;
	}

	public void setPisoProd(boolean pisoProd) {
		this.pisoProd = pisoProd;
	}

	public boolean isOllasUteProd() {
		return ollasUteProd;
	}

	public void setOllasUteProd(boolean ollasUteProd) {
		this.ollasUteProd = ollasUteProd;
	}

	public boolean isZonasLvProd() {
		return zonasLvProd;
	}

	public void setZonasLvProd(boolean zonasLvProd) {
		this.zonasLvProd = zonasLvProd;
	}

	public boolean isMesaProd() {
		return mesaProd;
	}

	public void setMesaProd(boolean mesaProd) {
		this.mesaProd = mesaProd;
	}

	public boolean isTechoProd() {
		return techoProd;
	}

	public void setTechoProd(boolean techoProd) {
		this.techoProd = techoProd;
	}

	public boolean isCortinasProd() {
		return cortinasProd;
	}

	public void setCortinasProd(boolean cortinasProd) {
		this.cortinasProd = cortinasProd;
	}

	public boolean isPeredesProd() {
		return peredesProd;
	}

	public void setPeredesProd(boolean peredesProd) {
		this.peredesProd = peredesProd;
	}

	public boolean isSoportLbArt() {
		return soportLbArt;
	}

	public void setSoportLbArt(boolean soportLbArt) {
		this.soportLbArt = soportLbArt;
	}

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.layout_zona_produccion);

		btnRegistroProd = (Button) findViewById(R.id.btnRegistroProd);
		chBxPediluvioProd = (CheckBox) findViewById(R.id.chBxPediluvioProd);
		chBxPisoProd = (CheckBox) findViewById(R.id.chBxPisoProd);
		chBxOllasUteProd = (CheckBox) findViewById(R.id.chBxOllasUteProd);
		chBxZonasLvProd = (CheckBox) findViewById(R.id.chBxZonasLvProd);
		chBxMesaProd = (CheckBox) findViewById(R.id.chBxMesaProd);
		chBxTechoProd = (CheckBox) findViewById(R.id.chBxTechoProd);
		chBxCortinasProd = (CheckBox) findViewById(R.id.chBxCortinasProd);
		cheBxPeredesProd = (CheckBox) findViewById(R.id.cheBxPeredesProd);
		chBxSoportLbArt = (CheckBox) findViewById(R.id.chBxSoportLbArt);
		manejadorMensajes = new handlerAlertMessage();
		activity = this;

	}

	@Override
	protected void onStart() {
		super.onStart();
		GetIpAddress direccion = new GetIpAddress(this);

		if (direccion.getDireccion() != null) {

			URL_VALIDAR_USUARIO = direccion.getDireccion() + "/validar.json";
			URL_ZONAS_PRODUCCION_CHEQUEADAS = direccion.getDireccion()
					+ "/chequeo_zonas_produccion.json";
			URL_REGISTRO_ZONAS_PRODUCCION = direccion.getDireccion()
					+ "/zonas_produccion.json";

			final ProgressDialog pd = ProgressDialog.show(this, null,
					this.getString(R.string.PbMsjCargando), true, true);
			new Thread(new Runnable() {
				@Override
				public void run() {
					self.zonasChequeadas(URL_ZONAS_PRODUCCION_CHEQUEADAS);
					Log.e("ZonaProduccion",
							"entra a URL_ZONAS_PRODUCCION_CHEQUEADAS");
					pd.dismiss();

				}
			}).start();
		} else {
			new AlertDialog.Builder(this)
					.setIcon(android.R.drawable.ic_dialog_alert)
					.setTitle(R.string.tituloAlerta)
					.setMessage(R.string.msjErSinDireccion)
					.setPositiveButton(R.string.btnAceptar,
							new DialogInterface.OnClickListener() {// un
								// listener que al pulsar, cierre la
								// aplicacion
								@Override
								public void onClick(DialogInterface dialog,
										int which) {
									// Salir
									Intent intent = new Intent();
									intent.setClass(activity, Etapas.class);
									startActivity(intent);
								}
							}).show();
		}
	}

	@SuppressLint("SimpleDateFormat")
	private TimePickerDialog.OnTimeSetListener showtime = new TimePickerDialog.OnTimeSetListener() {

		@SuppressLint("SimpleDateFormat")
		@Override
		public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
			hHora = hourOfDay;
			hMinuto = minute;

			Context context = getApplicationContext();
			CharSequence text = new StringBuilder().append(hHora).append(":")
					.append(hMinuto);
			int duration = Toast.LENGTH_SHORT;
			Toast toast = Toast.makeText(context, text, duration);
			toast.show();

			SimpleDateFormat formatoTiempo = new SimpleDateFormat("hh:mm");
			String time = (hHora + ":" + hMinuto).toString();

			try {
				Time tiempo = new Time(formatoTiempo.parse(time).getTime());
				setTiempoUsuario(tiempo);

			} catch (java.text.ParseException e) {
				manejadorMensajes.alertMessageOneButton(activity,
						R.string.tituloError, R.string.msjERHoraUsuario,
						R.string.btnAceptar);

			}

		}
	};

	private DatePickerDialog.OnDateSetListener showdate = new DatePickerDialog.OnDateSetListener() {

		@SuppressLint("SimpleDateFormat")
		@Override
		public void onDateSet(DatePicker view, int year, int monthOfYear,
				int dayOfMonth) {
			fAno = year;
			fMes = monthOfYear + 1;
			fDia = dayOfMonth;

			Context context = getApplicationContext();
			CharSequence text = new StringBuilder().append(fDia).append("-")
					.append(fMes).append("-").append(fAno);
			int duration = Toast.LENGTH_SHORT;

			Toast toast = Toast.makeText(context, text, duration);
			toast.show();

			SimpleDateFormat formatoFecha = new SimpleDateFormat("dd-MM-yyyy");
			String date = (fDia + "-" + fMes + "-" + fAno + "-").toString();

			try {
				setFechaUsuario(formatoFecha.parse(date));

			} catch (java.text.ParseException e) {

				manejadorMensajes.alertMessageOneButton(activity,
						R.string.tituloError, R.string.msjERFechaUsuario,
						R.string.btnAceptar);

			}

		}
	};

	@Override
	protected Dialog onCreateDialog(int id) {
		switch (id) {
		case TIME_DIALOG_ID:
			return new TimePickerDialog(this, showtime, hHora, hMinuto, true);

		case DATE_DIALOG_ID:
			return new DatePickerDialog(this, showdate, fAno, fMes, fDia);
		}
		return null;
	}

	@SuppressWarnings("deprecation")
	public void btnFechaProd(View v) {

		final Calendar c = Calendar.getInstance();
		fAno = c.get(Calendar.YEAR);
		fMes = c.get(Calendar.MONTH);
		fDia = c.get(Calendar.DAY_OF_MONTH);
		showDialog(DATE_DIALOG_ID);
	}

	@SuppressWarnings("deprecation")
	public void btnHoraProd(View v) {
		final Calendar c = Calendar.getInstance();
		hHora = c.get(Calendar.HOUR_OF_DAY);
		hMinuto = c.get(Calendar.MINUTE);
		showDialog(TIME_DIALOG_ID);

	}

	public void onCheckboxClickedProd(View view) {
		// Is the view now checked?
		boolean checked = ((CheckBox) view).isChecked();

		// Check which checkbox was clicked
		switch (view.getId()) {
		case R.id.chBxPediluvioProd:
			if (checked) {
				this.setPediluvioProd(checked);
				this.setValChecked(checked);
			} else {
				this.setPediluvioProd(!checked);
				this.setValChecked(!checked);
			}
			break;
		case R.id.chBxPisoProd:
			if (checked) {
				this.setPisoProd(checked);
				this.setValChecked(checked);
			} else {
				this.setPisoProd(!checked);
				this.setValChecked(!checked);
			}

			break;
		case R.id.chBxOllasUteProd:
			if (checked) {
				this.setOllasUteProd(checked);
				this.setValChecked(checked);
			} else {
				this.setOllasUteProd(!checked);
				this.setValChecked(!checked);
			}

			break;
		case R.id.chBxZonasLvProd:
			if (checked) {
				this.setZonasLvProd(checked);
				this.setValChecked(checked);
			} else {
				this.setZonasLvProd(!checked);
				this.setValChecked(!checked);
			}

			break;
		case R.id.chBxMesaProd:
			if (checked) {
				this.setMesaProd(checked);
				this.setValChecked(checked);
			} else {
				this.setMesaProd(!checked);
				this.setValChecked(!checked);
			}

			break;
		case R.id.chBxTechoProd:
			if (checked) {
				this.setTechoProd(checked);
				this.setValChecked(checked);
			} else {
				this.setTechoProd(!checked);
				this.setValChecked(!checked);
			}

			break;
		case R.id.chBxCortinasProd:
			if (checked) {
				this.setCortinasProd(checked);
				this.setValChecked(checked);
			} else {
				this.setCortinasProd(!checked);
				this.setValChecked(!checked);
			}

			break;
		case R.id.cheBxPeredesProd:
			if (checked) {
				this.setPeredesProd(checked);
				this.setValChecked(checked);
			} else {
				this.setPeredesProd(!checked);
				this.setValChecked(!checked);
			}

			break;
		case R.id.chBxSoportLbArt:
			if (checked) {
				this.setSoportLbArt(checked);
				this.setValChecked(checked);
			} else {

				this.setSoportLbArt(!checked);
				this.setValChecked(!checked);
			}

			break;

		}
	}

	/* metodo que captura la fecha y la hora del sistema */
	@SuppressLint("SimpleDateFormat")
	public void fechaHoraSistema() {
		final Calendar c = Calendar.getInstance();
		int ano = c.get(Calendar.YEAR);
		int mes = c.get(Calendar.MONTH) + 1;
		int dia = c.get(Calendar.DAY_OF_MONTH);
		int hora = c.get(Calendar.HOUR_OF_DAY);
		int minuto = c.get(Calendar.MINUTE);

		SimpleDateFormat formatoFecha = new SimpleDateFormat("dd-MM-yyyy");
		SimpleDateFormat formatoTiempo = new SimpleDateFormat("hh:mm");
		String date = (dia + "-" + mes + "-" + ano + "-").toString();
		String time = (hora + ":" + minuto).toString();

		try {
			Time tiempo = new Time(formatoTiempo.parse(time).getTime());
			Date fecha = formatoFecha.parse(date);
			this.setFechaSistema(fecha);
			this.setTiempoSistema(tiempo);

		} catch (java.text.ParseException e) {

			manejadorMensajes.alertMessageOneButton(activity,
					R.string.tituloError, R.string.msjERFechaHoraSistema,
					R.string.btnAceptar);

		}
	}

	/*
	 * metodo que crear una ventana emergente para registrar el codigo y
	 * contrasena
	 */
	public void mensajeRegistro() {

		AlertDialog.Builder mensajeEmergente = new AlertDialog.Builder(this);
		LayoutInflater inflater = this.getLayoutInflater();
		final View Inflator = inflater
				.inflate(R.layout.registro_empleado, null);
		final EditText ed1 = (EditText) Inflator
				.findViewById(R.id.etIdeEmpleado);
		final EditText ed2 = (EditText) Inflator
				.findViewById(R.id.etPasswEmpleado);
		mensajeEmergente.setTitle(R.string.msjValidarRegistro);
		mensajeEmergente.setView(Inflator);
		mensajeEmergente.setPositiveButton(R.string.btnRegistrar,
				new DialogInterface.OnClickListener() {

					@Override
					public void onClick(DialogInterface dialog, int which) {
						setIdEmpleado(ed1.getText().toString()); // sent id
						setPasswEmpleado(ed2.getText().toString()); // sent
																	// passw

						if (!self.getIdEmpleado().equals(STRING_EMPTY)
								&& !self.getPasswEmpleado()
										.equals(STRING_EMPTY)) {

							progressDialog = new ProgressDialog(self);
							progressDialog.setMessage(self
									.getString(R.string.PbMsjRegistrando));
							progressDialog.setCancelable(true);
							progressDialog.show();
							new Thread(new Runnable() {
								@Override
								public void run() {
									self.validarUsuario();
									Log.e("ZonaProduccion",
											"entra validar usuario");

								}
							}).start();

						} else {
							manejadorMensajes.alertMessageOneButton(activity,
									R.string.tituloAlerta,
									R.string.msjIdPasswInvali,
									R.string.btnAceptar);
						}

					}
				});
		mensajeEmergente.setNegativeButton(R.string.btnCancelar,
				new DialogInterface.OnClickListener() {

					@Override
					public void onClick(DialogInterface dialog, int which) {

					}
				});
		mensajeEmergente.create();
		mensajeEmergente.show();

	}

	/*
	 * metodo que hace referencia al evento del boton registrar lavado de
	 * produccion
	 */
	public void RegistroProduccion(View v) {
		this.fechaHoraSistema();
		this.validar();

	}

	/* metodo que valida si todo el registro esta completo */
	public void validar() {
		if (this.getFechaSistema() != null && this.getTiempoSistema() != null) {
			if (this.getFechaUsuario() != null) {
				if (this.getTiempoUsuario() != null) {

					if (this.isValChecked()) {
						this.mensajeRegistro();

					} else {
						// no ha chequeado nada
						manejadorMensajes.alertMessageOneButton(activity,
								R.string.tituloAlerta,
								R.string.msjNadaChequeado, R.string.btnAceptar);
					}

				} else {
					// falta hora
					manejadorMensajes.alertMessageOneButton(activity,
							R.string.tituloAlerta, R.string.msjSelecHora,
							R.string.btnAceptar);
				}
			} else {
				// falta fecha
				manejadorMensajes.alertMessageOneButton(activity,
						R.string.tituloAlerta, R.string.msjSelecFecha,
						R.string.btnAceptar);
			}
		}
	}

	/*
	 * Metodo que valida si el usuario se encuentra en el sistema o si tiene
	 * algun dato erroneo
	 */
	public void validarUsuario() {

		String ced = this.getIdEmpleado();
		String pass = this.getPasswEmpleado();
		HttpClient httpClient = new DefaultHttpClient();
		HttpPost post = new HttpPost(URL_VALIDAR_USUARIO);// operarios
		post.setHeader("content-type", "application/json");

		try {

			// Construimos el objeto en formato JSON
			JSONObject dato = new JSONObject();
			dato.put("cedula", ced);// cedula del operario
			dato.put("password", pass);// contrasena del operario
			dato.put("formulario", "f_zona_produccion");// permisos

			StringEntity entity = new StringEntity(dato.toString());
			post.setEntity(entity);
			HttpResponse resp = httpClient.execute(post);
			this.setIdOperarioEmpleado(EntityUtils.toString(resp.getEntity()));

			if (this.getIdOperarioEmpleado().equals(CNV)) {
				runOnUiThread(new Runnable() {
					public void run() {
						progressDialog.dismiss();
						manejadorMensajes.alertMessageOneButton(activity,
								R.string.tituloAlerta,
								R.string.msjCedulaIncorrecta,
								R.string.btnAceptar);

					}
				});

			} else {
				if (this.getIdOperarioEmpleado().equals(PNV)) {
					runOnUiThread(new Runnable() {
						public void run() {
							progressDialog.dismiss();
							manejadorMensajes.alertMessageOneButton(activity,
									R.string.tituloAlerta,
									R.string.msjPasswordIncorrecta,
									R.string.btnAceptar);

						}
					});

				} else {

					if (this.getIdOperarioEmpleado().equals(no_permiso)) {
						runOnUiThread(new Runnable() {
							public void run() {
								progressDialog.dismiss();
								manejadorMensajes.alertMessageOneButton(
										activity, R.string.tituloAlerta,
										R.string.msjSinPermisos,
										R.string.btnAceptar);

							}
						});
					} else {

						new Thread(new Runnable() {
							@Override
							public void run() {
								self.envioBaseDatos();
								Log.e("ZonaProduccion", "entra envio basedatos");

							}
						}).start();
					}

				}

			}

		} catch (Exception ex) {
			runOnUiThread(new Runnable() {
				public void run() {

					progressDialog.dismiss();
					manejadorMensajes.alertMessageOneButton(activity,
							R.string.tituloError, R.string.msjERvalidarUsuario,
							R.string.btnAceptar);
				}
			});

		}

	}

	/* metodo que carga las zonas que ya estan verificadas por otro operario */
	public void zonasChequeadas(String url) {

		try {
			JSONArray zonasChequeadasArray = JsonHelper
					.getJsonArrayFromUrl(url);
			JSONObject dato = new JSONObject();

			if (!zonasChequeadasArray.equals(null)) {
				Log.e("ZonaProduccion", "entra al if de diferente de null");
				for (int j = 0; j < zonasChequeadasArray.length(); j++) {
					dato = zonasChequeadasArray.getJSONObject(j);

					// if de puerta
					if (dato.getString("pedulivio").equals("true")) {

						runOnUiThread(new Runnable() {
							public void run() {
								chBxPediluvioProd.setChecked(true);
								chBxPediluvioProd.setEnabled(false);
								Log.e("ZonaProduccion",
										"entra al hilo de enviar el check a la puerta");

							}
						});

					}
					// if de piso
					if (dato.getString("piso").equals("true")) {

						runOnUiThread(new Runnable() {
							public void run() {
								chBxPisoProd.setChecked(true);
								chBxPisoProd.setEnabled(false);
								Log.e("ZonaProduccion",
										"entra al hilo de enviar el check al piso");

							}
						});

					}
					// if de ollas_utensilio
					if (dato.getString("ollas_utensilio").equals("true")) {

						runOnUiThread(new Runnable() {
							public void run() {
								chBxOllasUteProd.setChecked(true);
								chBxOllasUteProd.setEnabled(false);
								Log.e("ZonaProduccion",
										"entra al hilo de enviar el check de ollas_utensilio");

							}
						});

					}

					// if de zonas_de_lavado
					if (dato.getString("zonas_de_lavado").equals("true")) {

						runOnUiThread(new Runnable() {
							public void run() {
								chBxZonasLvProd.setChecked(true);
								chBxZonasLvProd.setEnabled(false);
								Log.e("ZonaProduccion",
										"entra al hilo de enviar el check de zonas_de_lavado");

							}
						});

					}

					// if de mesas
					if (dato.getString("mesas").equals("true")) {

						runOnUiThread(new Runnable() {
							public void run() {
								chBxMesaProd.setChecked(true);
								chBxMesaProd.setEnabled(false);
								Log.e("ZonaProduccion",
										"entra al hilo de enviar el check de mesas");

							}
						});

					}

					// if de techo
					if (dato.getString("techo").equals("true")) {

						runOnUiThread(new Runnable() {
							public void run() {
								chBxTechoProd.setChecked(true);
								chBxTechoProd.setEnabled(false);
								Log.e("ZonaProduccion",
										"entra al hilo de enviar el check de techo");

							}
						});

					}

					// if de cortinas
					if (dato.getString("cortinas").equals("true")) {

						runOnUiThread(new Runnable() {
							public void run() {
								chBxCortinasProd.setChecked(true);
								chBxCortinasProd.setEnabled(false);
								Log.e("ZonaProduccion",
										"entra al hilo de enviar el check de cortinas");

							}
						});

					}

					// if de paredes
					if (dato.getString("paredes").equals("true")) {

						runOnUiThread(new Runnable() {
							public void run() {
								cheBxPeredesProd.setChecked(true);
								cheBxPeredesProd.setEnabled(false);
								Log.e("ZonaProduccion",
										"entra al hilo de enviar el check de paredes");

							}
						});

					}

					// if de soporte_ingredientes
					if (dato.getString("soporte_ingredientes").equals("true")) {

						runOnUiThread(new Runnable() {
							public void run() {
								chBxSoportLbArt.setChecked(true);
								chBxSoportLbArt.setEnabled(false);
								Log.e("ZonaProduccion",
										"entra al hilo de enviar el check de soporte_ingredientes");

							}
						});

					}

				}
			}

			runOnUiThread(new Runnable() {
				public void run() {

					// if que valida si todos los checkbox estan deshabilitados
					// para poder asi deshabilitar el boton registrar
					if (!chBxPediluvioProd.isEnabled()
							&& !chBxPisoProd.isEnabled()
							&& !chBxOllasUteProd.isEnabled()
							&& !chBxZonasLvProd.isEnabled()
							&& !chBxMesaProd.isEnabled()
							&& !chBxTechoProd.isEnabled()
							&& !chBxCortinasProd.isEnabled()
							&& !cheBxPeredesProd.isEnabled()
							&& !chBxSoportLbArt.isEnabled()) {

						btnRegistroProd.setEnabled(false);
					}
				}
			});

		} catch (Exception ex) {
			/*
			 * hilo que muestra el mensaje de error de conexion al cargar los
			 * datos
			 */
			runOnUiThread(new Runnable() {
				public void run() {

					AlertDialog.Builder mensajeEmergente = new AlertDialog.Builder(
							activity);
					mensajeEmergente.setTitle(R.string.tituloError);
					mensajeEmergente.setMessage(R.string.msjERConexionCargar);
					mensajeEmergente.setNeutralButton(R.string.btnAceptar,
							new DialogInterface.OnClickListener() {

								public void onClick(DialogInterface dialog,
										int which) {
									ZonaProduccion.this.finish();

								}
							});

					mensajeEmergente.create();
					mensajeEmergente.show();
				}
			});
		}
	}

	/* registro a la base de datos */
	public void envioBaseDatos() {

		HttpClient httpClient = new DefaultHttpClient();
		// URL del servidor para guardar los datos de zona lavado
		HttpPost post = new HttpPost(URL_REGISTRO_ZONAS_PRODUCCION);

		try {
			// Construimos el objeto cliente en formato JSON
			JSONObject dato = new JSONObject();
			dato.put("empleado_id",
					Integer.parseInt(this.getIdOperarioEmpleado()));
			dato.put("fecha_usuario", this.getFechaUsuario());
			dato.put("fecha_sistema", this.getFechaSistema());
			dato.put("hora_usuario", this.getTiempoUsuario());
			dato.put("hora_sistema", this.getTiempoSistema());

			dato.put("pedulivio", this.isPediluvioProd());
			dato.put("cortinas", this.isCortinasProd());
			dato.put("paredes", this.isPeredesProd());
			dato.put("piso", this.isPisoProd());
			dato.put("ollas_utensilio", this.isOllasUteProd());
			dato.put("zonas_de_lavado", this.isZonasLvProd());
			dato.put("mesas", this.isMesaProd());
			dato.put("techo", this.isTechoProd());
			dato.put("soporte_ingredientes", this.isSoportLbArt());

			StringEntity entity = new StringEntity(dato.toString());
			post.setHeader("Content-Type", "application/json; chartset=UTF-8");
			post.setHeader("Accept", "application/json");
			post.setEntity(entity);
			HttpResponse resp = httpClient.execute(post);
			final String respStr = EntityUtils.toString(resp.getEntity());
			Log.e("ZonaProduccion", "ejecuta el post");

			if (respStr.equals("true")) {
				Log.e("ZonaProduccion", "el servidor me retorna true");
				this.setPediluvioProd(false);
				this.setCortinasProd(false);
				this.setPeredesProd(false);
				this.setPisoProd(false);
				this.setOllasUteProd(false);
				this.setZonasLvProd(false);
				this.setMesaProd(false);
				this.setTechoProd(false);
				this.setSoportLbArt(false);
				this.setValChecked(false);
				this.setFechaUsuario(null);
				this.setFechaSistema(null);
				this.setTiempoUsuario(null);
				this.setTiempoSistema(null);

				new Thread(new Runnable() {
					@Override
					public void run() {
						self.zonasChequeadas(URL_ZONAS_PRODUCCION_CHEQUEADAS);
						Log.e("ZonaProduccion",
								"entra a URL_ZONAS_PRODUCCION_CHEQUEADAS despues de almacenar datos");

					}
				}).start();

				runOnUiThread(new Runnable() {
					public void run() {

						// if que valida si todos los checkbox estan
						// deshabilitados
						// para poder asi deshabilitar el boton registrar
						if (!chBxPediluvioProd.isEnabled()
								&& !chBxPisoProd.isEnabled()
								&& !chBxOllasUteProd.isEnabled()
								&& !chBxZonasLvProd.isEnabled()
								&& !chBxMesaProd.isEnabled()
								&& !chBxTechoProd.isEnabled()
								&& !chBxCortinasProd.isEnabled()
								&& !cheBxPeredesProd.isEnabled()
								&& !chBxSoportLbArt.isEnabled()) {

							btnRegistroProd.setEnabled(false);
						}
						
					}
					
				});

				Log.e("ZonaProduccion", "esta antes del hilo de msj exitoso");
				// mensaje de respuesta del servidor
				runOnUiThread(new Runnable() {
					public void run() {
						progressDialog.dismiss();
						manejadorMensajes.alertMessageOneButton(activity,
								R.string.msjMuyBien,
								R.string.msjRegistroExitoso,
								R.string.btnAceptar);
						Log.e("ZonaProduccion",
								"el servidor me retorna true y esta en el mensaje en pantalla");

					}
				});

				this.setSALIR(false);

			}

		} catch (Exception e) {

			Log.e("ZonaProduccion", "me salta al catch");
			// mensaje de respuesta del servidor
			runOnUiThread(new Runnable() {
				public void run() {
					progressDialog.dismiss();
					manejadorMensajes.alertMessageOneButton(activity,
							R.string.tituloError, R.string.msjERConexionEnviar,
							R.string.btnAceptar);

				}
			});
		}

	}

	/* metodo que controla el botan atras */
	@Override
	public boolean onKeyDown(int keyCode, KeyEvent event) {

		if (keyCode == KeyEvent.KEYCODE_BACK) {
			if (this.salir()) {

				new AlertDialog.Builder(this)
						.setIcon(android.R.drawable.ic_dialog_alert)
						.setTitle(R.string.tituloAlerta)
						.setMessage(R.string.msjPregunta)
						.setNegativeButton(R.string.btnNo, null)// sin listener
						.setPositiveButton(R.string.btnSi,
								new DialogInterface.OnClickListener() {
									// un
									// listener que al pulsar, cierre la
									// aplicacian
									@Override
									public void onClick(DialogInterface dialog,
											int which) {
										// Salir
										ZonaProduccion.this.finish();
									}
								}).show();

				// Si el listener devuelve true, significa que el evento esta
				// procesado, y nadie debe hacer nada mas
				return true;
			} else {
				ZonaProduccion.this.finish();
			}
		}
		// para las demas cosas, se reenvia el evento al listener habitual
		return super.onKeyDown(keyCode, event);
	}

	/* verifica si no hay ningun dato en memoria ni en campos */
	public boolean salir() {

		if (this.isSALIR()) {
			return true;
		} else {
			return false;
		}

	}

}
